# 1.map(f, *iterables)高阶函数: 接收一个f函数和一个可迭代对象，并将f依次作用于iterables，得到一个map对象是一个迭代器返回
from functools import reduce


def f(a):
    sum = a**2
    return sum


list0 = [1, 2, 3]
list1 = map(f, list0)
print(list(list1))
print(list0)

# filter(f,*iterables)高阶函数：过滤；接收一个f和一个可迭代对象,并将f依次作用于可迭代对象,对元素进行判断返回True或False,得到一个filter对象是一个迭代器返回
list2 = [i for i in range(10)]
list3 = filter(lambda x: x > 5, list2)
print(list(list3))
print(list2)

# reduce(f, iterable)高阶函数：计算  接收一个f(必须接受两个参数)和一个可迭代对象iterable,返回计算后的结果


def sum(a, b):
    return a*10 + b


def go_int(x):
    return {'1': 1, '2': 2, '3': 3, '4': 4}[x]


list4 = reduce(sum, map(go_int, '1234'))
print(list4)










